Skip to main content

JUnit

JUnit es un framework de pruebas unitarias para el lenguaje de programación Java.

Este framework permite la creación de pruebas unitarias de forma sencilla y rápida, también proporciona una estructura clara y organizada para las pruebas.

Instalación

Para instalar JUnit en un proyecto Java, se debe buscar la dependencia junit-jupiter del grupo org.junit.jupiter en el repositorio central de Maven y agregarla al archivo pom.xml.

pom.xml
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.11.0-M2</version> <!-- Reemplaza con la versión más reciente encontrada -->
</dependency>

Ejemplo

A continuación se muestra un ejemplo de una prueba unitaria con JUnit.

Ejemplo.java

package com.example.app;

public class Ejemplo {

public int sumar(int a, int b) {
return a + b;
}

}

Ejemplo de test unitario aprobado.

EjemploTest.java

import org.junit.jupiter.api.Test;

public class EjemploTest {

@Test
public void testSumar() {

Ejemplo ejemplo = new Ejemplo();
int resultado = ejemplo.sumar(4, 4); // 4 + 4 = 8
assertEquals(8, resultado); // El test pasa porque 8 es igual a 8

}

}

Ejemplo de test unitario fallido.

EjemploTest.java

import org.junit.jupiter.api.Test;

public class EjemploTest {

@Test
public void testSumar() {

Ejemplo ejemplo = new Ejemplo();
int resultado = ejemplo.sumar(4, 4); // 4 + 4 = 8
assertEquals(9, resultado); // El test falla porque 9 no es igual a 8

}

}

Estructura Given, When, Then

La estructura Given, When, Then es una técnica utilizada para escribir pruebas unitarias de forma clara y organizada.

  • Given: Se proporcionan los datos de entrada y se configura el entorno de la prueba.

  • When: Se ejecuta el método que se desea probar.

  • Then: Se verifica que el resultado sea el esperado.

Ejemplo

package com.example.app;

import org.junit.jupiter.api.Test;

public class EjemploTest {

@Test
public void testSumar() {

// Given | Se proporcionan los datos de entrada y se configura el entorno de la prueba
Ejemplo ejemplo = new Ejemplo();
int a = 4;
int b = 4;

// When | Se ejecuta el método que se desea probar
int resultado = ejemplo.sumar(a, b);

// Then | Se verifica que el resultado sea el esperado
assertEquals(8, resultado);

}

}

En el ejemplo anterior, se siguió la estructura Given, When, Then para escribir una prueba unitaria del método sumar de la clase Ejemplo, la prueba es aprobada porque el resultado es el esperado.

Tipos de aserciones

JUnit proporciona varios métodos de aserción para verificar que los resultados de las pruebas sean los esperados. A continuación se muestran algunos de los métodos más comunes pero hay muchos más disponibles, se pueden encontrar en la documentación oficial de JUnit.

warning

Para los siguientes ejemplos se tiene en cuenta que la variable resultado es igual a 8.

assertEquals(expected, actual): Verifica que dos valores sean iguales.

assertEquals(8, resultado); // Verifica que 8 sea igual a resultado, si no son iguales, el test falla

assertNotEquals(expected, actual): Verifica que dos valores no sean iguales.

assertNotEquals(9, resultado); // Verifica que 9 no sea igual a resultado, si son iguales, el test falla

assertTrue(condition): Verifica que una condición sea verdadera.

assertTrue(resultado == 8); // Verifica que la condición sea verdadera, si es falsa, el test falla

assertFalse(condition): Verifica que una condición sea falsa.

assertFalse(resultado == 9); // Verifica que la condición sea falsa, si es verdadera, el test falla

assertNull(actual): Verifica que un valor sea nulo.

assertNull(null); // Verifica que el valor sea nulo, si no es nulo, el test falla

assertNotNull(actual): Verifica que un valor no sea nulo.

assertNotNull(resultado); // Verifica que el valor no sea nulo, si es nulo, el test falla

assertInstanceOf(expectedType, actual): Verifica que un objeto sea una instancia de un tipo específico.

assertInstanceOf(Integer.class, resultado); // Verifica que resultado sea una instancia de Integer, si no lo es, el test falla

assertNotInstanceOf(expectedType, actual): Verifica que un objeto no sea una instancia de un tipo específico.

assertNotInstanceOf(String.class, resultado); // Verifica que resultado no sea una instancia de String, si lo es, el test falla

assertThrows(expectedException, executable): Verifica que un método lance una excepción.

assertThrows(ArithmeticException.class, () -> {
int division = 1 / 0; // Lanza una excepción de división por cero
});

Ejemplos reales

Estos son algunos ejemplos de pruebas unitarias utilizando JUnit. (Todos los tests están aprobados).

A continuación se muestra un ejemplo de una clase Calculadora con sus respectivas pruebas unitarias utilizando JUnit.

Calculadora.java

package com.example.app;

public class Calculadora {

public int sumar(int a, int b) {
return a + b;
}

public int restar(int a, int b) {
return a - b;
}

public int multiplicar(int a, int b) {
return a * b;
}

public int dividir(int a, int b) {
return a / b;
}

}

CalculadoraTest.java

package com.example.app;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

public class CalculadoraTest {

@Test
public void testSumar() {

//1. Given
Calculadora calculadora = new Calculadora();

//2. When
int resultado = calculadora.sumar(4, 4);

//3. Then
assertEquals(8, resultado);

}

@Test
public void testRestar() {

//1. Given
Calculadora calculadora = new Calculadora();

//2. When
int resultado = calculadora.restar(4, 4);

//3. Then
assertEquals(0, resultado);

}

@Test
public void testMultiplicar() {

//1. Given
Calculadora calculadora = new Calculadora();

//2. When
int resultado = calculadora.multiplicar(4, 4);

//3. Then
assertEquals(16, resultado);

}

@Test
public void testDividir() {

//1. Given
Calculadora calculadora = new Calculadora();

//2. When
int resultado = calculadora.dividir(4, 4);

//3. Then
assertEquals(1, resultado);

}

}